﻿Imports VN.INS.DL.DH
Imports VN.INS.BL.BE
Public Class ReporteDA

    Public Function RegistroAvance(ByVal strPersona As String, ByVal strPeriodo As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            objDt = New DataTable           
            lxc_SQL = " SELECT PE.DESCRIPCION PERIODO,  P.NOMBRES || ' ' || P.APELLIDO_PATERNO AS MONITOREADOR,PO.NOMBRE, PTP.ESTADO ESTADO_PLAN, PFP.ESTADO ESTADO_FISICO, PFI.ESTADO ESTADO_FINANCIERO " & _
                    "FROM PERSONA P " & _
                    "LEFT JOIN PLAN_TRABAJO_PERSONA PTP ON PTP.PERSONA_MONITOREO = P.PERSONA " & _
                    "LEFT JOIN PLAN_TRABAJO_POA PTO ON PTO.ID_PLAN_TRABAJO_PERSONA = PTP.ID_PLAN_TRABAJO_PERSONA " & _
                    "INNER JOIN POA PO ON PO.POA = PTO.POA  " & _
                    "LEFT JOIN (SELECT DISTINCT ID_PLAN_TRABAJO_POA, ESTADO FROM POA_FISICO_PERSONA) PFP ON PFP.ID_PLAN_TRABAJO_POA=PTO.ID_PLAN_TRABAJO_POA " & _
                    "LEFT JOIN (SELECT DISTINCT ID_PLAN_TRABAJO_POA, ESTADO FROM POA_FINANCIERO_PERSONA) PFI ON PFI.ID_PLAN_TRABAJO_POA=PTO.ID_PLAN_TRABAJO_POA " & _
                    "INNER JOIN PERIODO PE ON PE.PERIODO = PTP.PERIODO "
            If strPeriodo <> "all" Then
                lxc_SQL = lxc_SQL & "WHERE  PTP.PERIODO = '" & strPeriodo & "' AND PO.ESTADO IN('A','C') "
            End If
            lxc_SQL = lxc_SQL + "ORDER BY PE.PERIODO,PO.POA  "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function MontoPresupuestado(ByVal strPOA As String) As String
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            objDt = New DataTable
            lxc_SQL = " SELECT P.MONTO_TOTAL_INVERTIDO FROM POA P WHERE P.POA = '" & strPOA & "' AND P.ESTADO IN('A', 'C') "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt.Rows(0).Item("MONTO_TOTAL_INVERTIDO").ToString
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function MontoProgramado(ByVal strPOA As String, ByVal strPeriodo As String) As String
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            objDt = New DataTable
            lxc_SQL = " SELECT MONTO_PROGRAMADO " & _
                        "FROM (  SELECT S.MONTO_PROGRAMADO, P.PERIODO " & _
                        "        FROM    SEG_PERIODO_AVAN_FINAN S  " & _
                        "INNER JOIN PERIODO P  " & _
                        "             ON P.PERIODO = S.PERIODO " & _
                        "       WHERE     S.POA = '" & strPOA & "' " & _
                        "             AND P.ANHIO IN (SELECT ANHIO FROM PERIODO WHERE PERIODO = '" & strPeriodo & "') " & _
                        "             AND P.MES IN (SELECT MES FROM PERIODO WHERE PERIODO = '" & strPeriodo & "') " & _
                        "    ORDER BY P.PERIODO) " & _
                        "WHERE ROWNUM = 1"
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            If objDt.Rows.Count = 0 Then
                Return ""
            Else
                Return objDt.Rows(0).Item("MONTO_PROGRAMADO").ToString
            End If            
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function CargaAvanceFinancieroSemanal(ByVal strPoa As String, ByVal strPeriodoActual As String, strPeriodoAnterior As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try

            objDt = New DataTable
            lxc_SQL = "SELECT POA_FINAN_ACUM_MENSUAL (S.POA, P.MES ) MONTO_PROGRAMADO_ACTUAL, " & _
                    " S.MONTO_PROGRAMADO MONTO_PROGRAMADO_ANTERIOR, S.MONTO_COMPROMETIDO, S.MONTO_DEVENGADO, " & _
                    " S.MONTO_GIRADO, S.SEMAFORO, S.OBSERVACIONES, S.ACCION " & _
                    " FROM SEG_PERIODO_AVAN_FINAN S " & _
                    " INNER JOIN PERIODO P " & _
                    " ON P.TIPO_PERIODO = 'AVANCE_SEMANAL' AND P.PERIODO = '" & strPeriodoActual & "' " & _
                    " WHERE S.POA = '" & strPoa & "' " & _
                    " AND S.PERIODO = '" & strPeriodoAnterior & "' "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function CargaAvanceFinancieroMensual(ByVal strPoa As String, ByVal strPeriodo As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            objDt = New DataTable
            lxc_SQL = " SELECT MONTO_PROGRAMADO, MONTO_COMPROMETIDO, MONTO_DEVENGADO, MONTO_GIRADO, SEMAFORO, OBSERVACIONES, ACCION " & _
                    "FROM SEG_PERIODO_AVAN_FINAN_MENSUAL " & _
                    "WHERE POA = '" & strPoa & "' " & _
                    "AND PERIODO = '" & strPeriodo & "' "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Sub Insertar_Reporte_Semanal(ByVal PE As String, ByVal PO As String, ByVal PP As String, ByVal EJ As String, ByVal AC As String, ByVal ES As String, _
                                       ByVal PR As Double, ByVal MC As Double, ByVal MD As Double, ByVal MG As Double, ByVal MP As Double, ByVal OB As String, ByVal SE As String, ByVal strPersona As String)
        Dim objData As AdministradorOracle
        'Dim objTxt As PrimitiveTransaction
        Dim pObjgrilla As String = "INSERTAR_REPORTE_SEMANAL"
        Try
            objData = New AdministradorOracle
            objData.CreateInputOracle("PE", PE, 10)
            objData.CreateInputOracle("PO", PO, 8)
            objData.CreateInputOracle("PP", PP, 8)
            objData.CreateInputOracle("EJ", EJ, 8)
            objData.CreateInputOracle("AC", AC, 800)
            objData.CreateInputOracle("ES", ES, 1)
            objData.CreateInputOracle("PR", PR, 20)
            objData.CreateInputOracle("MC", MC, 20)
            objData.CreateInputOracle("MD", MD, 20)
            objData.CreateInputOracle("MG", MG, 20)
            objData.CreateInputOracle("MP", MP, 20)
            objData.CreateInputOracle("OB", OB, 1600)
            objData.CreateInputOracle("SE", SE, 1)
            objData.CreateInputOracle("PERS", strPersona, 8)
            objData.ExecuteOracle_NonQuery("INSERTAR_REPORTE_SEMANAL", "Conexion.Oracle")
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Sub Insertar_Reporte_Mensual(ByVal PE As String, ByVal PO As String, ByVal PP As String, ByVal EJ As String, ByVal AC As String, ByVal ES As String, _
                                       ByVal PR As Double, ByVal MC As Double, ByVal MD As Double, ByVal MG As Double, ByVal MP As Double, ByVal OB As String, ByVal SE As String, ByVal strPersona As String)
        Dim objData As AdministradorOracle
        'Dim objTxt As PrimitiveTransaction
        Dim pObjgrilla As String = "INSERTAR_REPORTE_MENSUAL"
        Try
            objData = New AdministradorOracle
            objData.CreateInputOracle("PE", PE, 10)
            objData.CreateInputOracle("PO", PO, 8)
            objData.CreateInputOracle("PP", PP, 8)
            objData.CreateInputOracle("EJ", EJ, 8)
            objData.CreateInputOracle("AC", AC, 800)
            objData.CreateInputOracle("ES", ES, 1)
            objData.CreateInputOracle("PR", PR, 20)
            objData.CreateInputOracle("MC", MC, 20)
            objData.CreateInputOracle("MD", MD, 20)
            objData.CreateInputOracle("MG", MG, 20)
            objData.CreateInputOracle("MP", MP, 20)
            objData.CreateInputOracle("OB", OB, 1600)
            objData.CreateInputOracle("SE", SE, 1)
            objData.CreateInputOracle("PERS", strPersona, 8)
            objData.ExecuteOracle_NonQuery("INSERTAR_REPORTE_MENSUAL", "Conexion.Oracle")
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Sub Actualizar_Reporte_Semanal(ByVal PE As String, ByVal PO As String, ByVal AC As String, ByVal MC As Double, _
                                          ByVal MD As Double, ByVal MG As Double, ByVal MP As Double, ByVal OB As String, ByVal SE As String, ByVal strPersona As String)
        Dim objData As AdministradorOracle
        'Dim objTxt As PrimitiveTransaction
        Dim pObjgrilla As String = "EDITAR_REPORTE_SEMANAL"
        Try
            objData = New AdministradorOracle
            objData.CreateInputOracle("PE", PE, 10)
            objData.CreateInputOracle("PO", PO, 8)
            objData.CreateInputOracle("AC", AC, 800)
            objData.CreateInputOracle("MC", MC, 20)
            objData.CreateInputOracle("MD", MD, 20)
            objData.CreateInputOracle("MG", MG, 20)
            objData.CreateInputOracle("MP", MP, 20)
            objData.CreateInputOracle("OB", OB, 1600)
            objData.CreateInputOracle("SE", SE, 1)
            objData.CreateInputOracle("PERS", strPersona, 8)
            objData.ExecuteOracle_NonQuery("EDITAR_REPORTE_SEMANAL", "Conexion.Oracle")
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Sub Actualizar_Reporte_Mensual(ByVal PE As String, ByVal PO As String, ByVal AC As String, ByVal MC As Double, _
                                          ByVal MD As Double, ByVal MG As Double, ByVal MP As Double, ByVal OB As String, ByVal SE As String, ByVal strPersona As String)
        Dim objData As AdministradorOracle
        'Dim objTxt As PrimitiveTransaction
        Dim pObjgrilla As String = "EDITAR_REPORTE_MENSUAL"
        Try
            objData = New AdministradorOracle
            objData.CreateInputOracle("PE", PE, 10)
            objData.CreateInputOracle("PO", PO, 8)
            objData.CreateInputOracle("AC", AC, 800)
            objData.CreateInputOracle("MC", MC, 20)
            objData.CreateInputOracle("MD", MD, 20)
            objData.CreateInputOracle("MG", MG, 20)
            objData.CreateInputOracle("MP", MP, 20)
            objData.CreateInputOracle("OB", OB, 1600)
            objData.CreateInputOracle("SE", SE, 1)
            objData.CreateInputOracle("PERS", strPersona, 8)
            objData.ExecuteOracle_NonQuery("EDITAR_REPORTE_MENSUAL", "Conexion.Oracle")
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Function Reporte1(ByVal strPPER As String, ByVal strPeriodo As String, ByVal strRegion As String, ByVal strAmbito As String, ByVal strEjecutor As String, ByVal strTipo As String, ByVal strEsp As String, ByVal strMon As String, ByVal strSem As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            Dim Ubigeo As String = ""
            If strRegion <> "" Then
                Ubigeo = " AND P.UBIGEO = '" & strRegion & "' "
            End If
            Dim Ambito As String = ""
            If strAmbito <> "" Then
                Ambito = " AND P.AMBITO = '" & strAmbito & "' "
            End If
            Dim Ejecutor As String = ""
            If strEjecutor <> "" Then
                Ejecutor = " AND P.EJECUTOR = '" & strEjecutor & "' "
            End If
            Dim Tipo As String = ""
            If strTipo <> "" Then
                Tipo = " AND P.TIPO_PROYECTO_ACTIVIDAD = '" & strTipo & "' "
            End If
            Dim Esp As String = ""
            If strEsp <> "" Then
                Esp = " AND P.PERSONA_ESPECIALISTA = '" & strEsp & "' "
            End If
            Dim Mon As String = ""
            If strMon <> "" Then
                Mon = " AND P.PERSONA_MONITOREO = '" & strMon & "' "
            End If
            Dim Sem As String = ""
            If strSem <> "" Then
                Sem = "  AND S.SEMAFORO = '" & strSem & "' "
            End If
            objDt = New DataTable
            lxc_SQL = "SELECT * FROM (SELECT T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO, " & _
                    "NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO, " & _
                    "NVL(ROUND(SUM(S.MONTO_DEVENGADO)/CASE WHEN SUM(S.MONTO_PROGRAMADO)= 0 THEN 1 ELSE SUM(S.MONTO_PROGRAMADO) END ,2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL, " & _
                    "NVL(ROUND(SUM(S.MONTO_GIRADO)/CASE WHEN SUM(S.MONTO_PROGRAMADO)= 0 THEN 1 ELSE SUM(S.MONTO_PROGRAMADO) END ,2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL " & _
                    "FROM  TIPO_PROYECTO_ACTIVIDAD T " & _
                    "INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD " & _
                    "LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' " & _
                    "WHERE P.PPER LIKE '" & strPPER & "%' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
                    "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION " & _
                    "ORDER BY T.TIPO_PROYECTO_ACTIVIDAD )  " & _
                    "UNION ALL " & _
                    "SELECT '0' AS TIPO_PROYECTO_ACTIVIDAD, 'Total General' AS DESCRIPCION,SUM(MONTO_PRESUPUESTADO) MONTO_PRESUPUESTADO, SUM(MONTO_PROGRAMADO) MONTO_PROGRAMADO,  " & _
                    "SUM(MONTO_COMPROMETIDO) MONTO_COMPROMETIDO, SUM(MONTO_DEVENGADO) MONTO_DEVENGADO,SUM(MONTO_GIRADO) MONTO_GIRADO,  " & _
                    "CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PROGRAMADO),2),0) END AS DEVENGADO_MES, " & _
                    "CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS DEVENGADO_ANUAL, " & _
                    "CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PROGRAMADO),2),0) END AS GIRADO_MES, " & _
                    "CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS GIRADO_ANUAL " & _
                    "FROM ( " & _
                    "SELECT T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO,  " & _
                    "NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO,  " & _
                    "NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL,  " & _
                    "NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL  " & _
                    "FROM  TIPO_PROYECTO_ACTIVIDAD T  " & _
                    "INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD  " & _
                    "LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' " & _
                    "WHERE P.PPER LIKE  '" & strPPER & "%' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
                    "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION  " & _
                    "ORDER BY T.TIPO_PROYECTO_ACTIVIDAD )  "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ReporteAFPPER(ByVal strPPER As String, ByVal strPeriodo As String, ByVal strRegion As String, ByVal strAmbito As String, ByVal strEjecutor As String, ByVal strTipo As String, ByVal strEsp As String, ByVal strMon As String, ByVal strSem As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL, lxc_SQL1, lxc_SQL2, lxc_SQL3, lxc_SQL4 As String
        Try
            objDt = New DataTable
            Dim Ubigeo As String = ""
            If strRegion <> "" Then
                Ubigeo = " AND P.UBIGEO = '" & strRegion & "' "
            End If
            Dim Ambito As String = ""
            If strAmbito <> "" Then
                Ambito = " AND P.AMBITO = '" & strAmbito & "' "
            End If
            Dim Ejecutor As String = ""
            If strEjecutor <> "" Then
                Ejecutor = " AND P.EJECUTOR = '" & strEjecutor & "' "
            End If
            Dim Tipo As String = ""
            If strTipo <> "" Then
                Tipo = " AND P.TIPO_PROYECTO_ACTIVIDAD = '" & strTipo & "' "
            End If
            Dim Esp As String = ""
            If strEsp <> "" Then
                Esp = " AND P.PERSONA_ESPECIALISTA = '" & strEsp & "' "
            End If
            Dim Mon As String = ""
            If strMon <> "" Then
                Mon = " AND P.PERSONA_MONITOREO = '" & strMon & "' "
            End If
            Dim Sem As String = ""
            If strSem <> "" Then
                Sem = "  AND S.SEMAFORO = '" & strSem & "' "
            End If
            lxc_SQL = ""
            'PIRDAIS
            lxc_SQL1 = "SELECT '0'  PPER,  '' PPER_DES, '0' AS TIPO_PROYECTO_ACTIVIDAD, 'PIRDAIS' AS DESCRIPCION,SUM(MONTO_PRESUPUESTADO) MONTO_PRESUPUESTADO, SUM(MONTO_PROGRAMADO) MONTO_PROGRAMADO,  SUM(MONTO_COMPROMETIDO) MONTO_COMPROMETIDO, SUM(MONTO_DEVENGADO) MONTO_DEVENGADO,SUM(MONTO_GIRADO) MONTO_GIRADO,  CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PROGRAMADO),2),0) END AS DEVENGADO_MES, CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS DEVENGADO_ANUAL, CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PROGRAMADO),2),0) END AS GIRADO_MES, CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS GIRADO_ANUAL FROM " & _
            "( SELECT P.PPER,PP.ABREVIATURA  PPER_DES, T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO,  NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO,  NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL,  NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL  FROM  TIPO_PROYECTO_ACTIVIDAD T  INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD  LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
            "WHERE P.PPER = 'PPE-0001' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
            "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION, P.PPER,PP.ABREVIATURA  ORDER BY T.TIPO_PROYECTO_ACTIVIDAD )   " & _
            "           UNION ALL  " & _
            "SELECT * FROM (SELECT P.PPER,PP.ABREVIATURA PPER_DES, T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO, NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/CASE WHEN SUM(S.MONTO_PROGRAMADO) = 0 THEN 1 ELSE SUM (S.MONTO_PROGRAMADO) END,2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL, NVL(ROUND(SUM(S.MONTO_GIRADO)/CASE WHEN SUM(S.MONTO_PROGRAMADO) = 0 THEN 1 ELSE SUM(S.MONTO_PROGRAMADO) END ,2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL FROM  TIPO_PROYECTO_ACTIVIDAD T INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
            "WHERE P.PPER = 'PPE-0001' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
            "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION, P.PPER,PP.ABREVIATURA  ORDER BY P.PPER,T.TIPO_PROYECTO_ACTIVIDAD)  "
            '"UNION ALL  "
            'PTCD
            lxc_SQL2 = "SELECT '0'  PPER,  '' PPER_DES, '0' AS TIPO_PROYECTO_ACTIVIDAD, 'PTCD' AS DESCRIPCION,SUM(MONTO_PRESUPUESTADO) MONTO_PRESUPUESTADO, SUM(MONTO_PROGRAMADO) MONTO_PROGRAMADO,  SUM(MONTO_COMPROMETIDO) MONTO_COMPROMETIDO, SUM(MONTO_DEVENGADO) MONTO_DEVENGADO,SUM(MONTO_GIRADO) MONTO_GIRADO,  CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PROGRAMADO),2),0) END AS DEVENGADO_MES, CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS DEVENGADO_ANUAL, CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PROGRAMADO),2),0) END AS GIRADO_MES, CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS GIRADO_ANUAL FROM " & _
            "( SELECT P.PPER,PP.ABREVIATURA  PPER_DES, T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO,  NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO,  NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL,  NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL  FROM  TIPO_PROYECTO_ACTIVIDAD T  INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD  LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
            "WHERE P.PPER = 'PPE-0002' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
            "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION, P.PPER,PP.ABREVIATURA  ORDER BY T.TIPO_PROYECTO_ACTIVIDAD )   " & _
            "UNION ALL  " & _
            "SELECT * FROM ( SELECT P.PPER,PP.ABREVIATURA PPER_DES, T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO, NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL FROM  TIPO_PROYECTO_ACTIVIDAD T INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
            "WHERE P.PPER = 'PPE-0002' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
            "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION, P.PPER,PP.ABREVIATURA  ORDER BY P.PPER,T.TIPO_PROYECTO_ACTIVIDAD ) "
            '"UNION ALL  " 
            'PPCOD
            lxc_SQL3 = "SELECT '0'  PPER,  '' PPER_DES, '0' AS TIPO_PROYECTO_ACTIVIDAD, 'PPCOD' AS DESCRIPCION,SUM(MONTO_PRESUPUESTADO) MONTO_PRESUPUESTADO, SUM(MONTO_PROGRAMADO) MONTO_PROGRAMADO,  SUM(MONTO_COMPROMETIDO) MONTO_COMPROMETIDO, SUM(MONTO_DEVENGADO) MONTO_DEVENGADO,SUM(MONTO_GIRADO) MONTO_GIRADO,  CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PROGRAMADO),2),0) END AS DEVENGADO_MES, CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS DEVENGADO_ANUAL, CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PROGRAMADO),2),0) END AS GIRADO_MES, CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS GIRADO_ANUAL FROM " & _
            "( SELECT P.PPER,PP.ABREVIATURA  PPER_DES, T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO,  NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO,  NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL,  NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL  FROM  TIPO_PROYECTO_ACTIVIDAD T  INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD  LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
            "WHERE P.PPER = 'PPE-0003'  " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
            "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION, P.PPER,PP.ABREVIATURA  ORDER BY T.TIPO_PROYECTO_ACTIVIDAD )   " & _
            "UNION ALL  " & _
            "SELECT * FROM ( SELECT P.PPER,PP.ABREVIATURA PPER_DES, T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO, NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/CASE WHEN SUM (S.MONTO_PROGRAMADO)=0 THEN 1 ELSE SUM (S.MONTO_PROGRAMADO) END,2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL, NVL(ROUND(SUM(S.MONTO_GIRADO)/CASE WHEN SUM (S.MONTO_PROGRAMADO)=0 THEN 1 ELSE SUM (S.MONTO_PROGRAMADO) END,2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL FROM  TIPO_PROYECTO_ACTIVIDAD T INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
            "WHERE P.PPER = 'PPE-0003' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
            "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION, P.PPER,PP.ABREVIATURA  ORDER BY P.PPER,T.TIPO_PROYECTO_ACTIVIDAD ) "
            '"UNION ALL  "
            'TOTAL
            lxc_SQL4 = "SELECT '0'  PPER,  '' PPER_DES, '0' AS TIPO_PROYECTO_ACTIVIDAD, 'Total General' AS DESCRIPCION,SUM(MONTO_PRESUPUESTADO) MONTO_PRESUPUESTADO, SUM(MONTO_PROGRAMADO) MONTO_PROGRAMADO,  SUM(MONTO_COMPROMETIDO) MONTO_COMPROMETIDO, SUM(MONTO_DEVENGADO) MONTO_DEVENGADO,SUM(MONTO_GIRADO) MONTO_GIRADO,  CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PROGRAMADO),2),0) END AS DEVENGADO_MES, CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_DEVENGADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS DEVENGADO_ANUAL, CASE WHEN SUM(MONTO_PROGRAMADO) = 0 THEN 0 ELSE  NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PROGRAMADO),2),0) END AS GIRADO_MES, CASE WHEN SUM(MONTO_PRESUPUESTADO) = 0 THEN 0 ELSE NVL(ROUND(SUM(MONTO_GIRADO)/SUM(MONTO_PRESUPUESTADO),2),0) END AS GIRADO_ANUAL FROM " & _
            "( SELECT P.PPER,PP.ABREVIATURA PPER_DES, T.TIPO_PROYECTO_ACTIVIDAD, (CASE WHEN T.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' ELSE T.DESCRIPCION  END) DESCRIPCION, NVL(SUM(S.MONTO_PRESUPUESTADO),0) AS MONTO_PRESUPUESTADO, NVL(SUM(S.MONTO_PROGRAMADO),0) AS MONTO_PROGRAMADO,  NVL(SUM(S.MONTO_COMPROMETIDO),0) AS MONTO_COMPROMETIDO , NVL(SUM(S.MONTO_DEVENGADO),0) AS MONTO_DEVENGADO, NVL(SUM(S.MONTO_GIRADO),0) AS MONTO_GIRADO,  NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS DEVENGADO_MES, NVL(ROUND(SUM(S.MONTO_DEVENGADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS DEVENGADO_ANUAL,  NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PROGRAMADO),2),0) AS GIRADO_MES, NVL(ROUND(SUM(S.MONTO_GIRADO)/SUM(S.MONTO_PRESUPUESTADO),2),0) AS GIRADO_ANUAL  FROM  TIPO_PROYECTO_ACTIVIDAD T  INNER JOIN POA P ON T.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD  LEFT JOIN  SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
            "WHERE P.PPER LIKE '" & strPPER & "%'  " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
            "GROUP BY T.TIPO_PROYECTO_ACTIVIDAD, T.DESCRIPCION, P.PPER,PP.ABREVIATURA  ORDER BY T.TIPO_PROYECTO_ACTIVIDAD )   "

            If strPPER = "" Then
                lxc_SQL = lxc_SQL1 + " UNION ALL " + lxc_SQL2 + " UNION ALL " + lxc_SQL3 + " UNION ALL " + lxc_SQL4
            ElseIf strPPER = "PPE-0001" Then
                lxc_SQL = lxc_SQL1 + " UNION ALL " + lxc_SQL4
            ElseIf strPPER = "PPE-0002" Then
                lxc_SQL = lxc_SQL2 + " UNION ALL " + lxc_SQL4
            ElseIf strPPER = "PPE-0003" Then
                lxc_SQL = lxc_SQL3 + " UNION ALL " + lxc_SQL4
            End If
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ListaPOA_Reporte(ByVal strNombre As String, ByVal strTipo As String, ByVal strPersona As String, ByVal strPeriodo As String, strAnhio As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL, strJOIN, strEstado As String

        objDt = objData.ExecuteSQL("SELECT ESTADO FROM PERIODO WHERE TIPO_PERIODO = 'AVANCE_SEMANAL' AND PERIODO = '" & strPeriodo & "'", "Conexion.Oracle")
        If objDt.Rows.Count > 0 Then
            If objDt.Rows(0).Item("ESTADO").ToString = "1" Then
                strJOIN = "LEFT"
                'strEstado = " AND P.ESTADO = 'A' "
                strEstado = " AND P.ESTADO IN('A', 'C') AND P.ANHIO_FIRMA_POA = '" & strAnhio & "' "
            Else
                strJOIN = " INNER"
                strEstado = ""
            End If

            Try
                lxc_SQL = "SELECT P.NOMBRE,  P.ANHIO_FIRMA_POA,  PROD.PRODUCTO, PROD.DESCRIPCION DESC_PROD, NVL(S.MONTO_PRESUPUESTADO, P.MONTO_TOTAL_INVERTIDO) MONTO_TOTAL_INVERTIDO, PM.NOMBRES || ' ' || PM.APELLIDO_PATERNO || ' ' || PM.APELLIDO_MATERNO AS MONITOREADOR, PP.PPER, E.EJECUTOR, E.DESCRIPCION AS EJE_DES , " & _
                          "PE.NOMBRES || ' ' || PE.APELLIDO_PATERNO || ' ' || PE.APELLIDO_MATERNO AS ESPECIALISTA, P.OBJETIVO,P.SNIP,P.FECHA_VIABILIDAD, P.POA ,U.NOMBRE AS UBIGEO, TPA.DESCRIPCION, PP.ABREVIATURA , S.SEMAFORO, S.OBSERVACIONES,S.ACCION " & _
                          ",S.MONTO_PROGRAMADO,S.MONTO_COMPROMETIDO, S.MONTO_DEVENGADO, S.MONTO_GIRADO, S.PERIODO, " & _
                          "CASE WHEN NVL(S.MONTO_PROGRAMADO,0) = 0  THEN  0 ELSE ROUND(S.MONTO_GIRADO / S.MONTO_PROGRAMADO,2) END GIRADO_MES, " & _
                          "CASE WHEN NVL(S.MONTO_PRESUPUESTADO,0) = 0  THEN  0 ELSE ROUND(S.MONTO_GIRADO / S.MONTO_PRESUPUESTADO,2) END GIRADO_ANUAL " & _
                          "FROM POA P " & _
                          "INNER JOIN TIPO_PROYECTO_ACTIVIDAD TPA ON TPA.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
                          "LEFT JOIN PERSONA PM ON PM.PERSONA = P.PERSONA_MONITOREO " & _
                          "LEFT JOIN PERSONA PE ON PE.PERSONA = P.PERSONA_ESPECIALISTA " & _
                          "LEFT JOIN UBIGEO  U ON U.UBIGEO = P.UBIGEO LEFT JOIN EJECUTOR E ON P.EJECUTOR = E.EJECUTOR " & _
                          "LEFT JOIN PRODUCTO PROD ON P.PRODUCTO = PROD.PRODUCTO " & strJOIN & _
                          " JOIN SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' WHERE 1 = 1 " & strEstado
                If strNombre <> "" Then
                    lxc_SQL = lxc_SQL & "AND UPPER (P.NOMBRE||E.DESCRIPCION) LIKE UPPER('%" & strNombre & "%') "
                End If
                If strTipo <> "all" Then
                    lxc_SQL = lxc_SQL & "AND P.TIPO_PROYECTO_ACTIVIDAD = '" & strTipo & "'"
                End If
                If strPersona <> "" Then
                    lxc_SQL = lxc_SQL & "AND UPPER('" & strPersona & "') IN (UPPER(P.PERSONA_ESPECIALISTA),UPPER(P.PERSONA_MONITOREO))  "
                End If
                lxc_SQL = lxc_SQL & " ORDER BY PPER,EJE_DES,NOMBRE "
                objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
                Return objDt

            Catch ex As Exception
                Throw ex
            End Try
        Else
            Return Nothing
        End If
    End Function

    Public Function ListaPOA_Mensual(ByVal strNombre As String, ByVal strTipo As String, ByVal strPersona As String, ByVal strPeriodo As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL, strJOIN, strEstado As String

        objDt = objData.ExecuteSQL("SELECT ESTADO FROM PERIODO WHERE TIPO_PERIODO = 'AVANCE_FINAN_MENSUAL' AND PERIODO = '" & strPeriodo & "'", "Conexion.Oracle")
        If objDt.Rows.Count > 0 Then
            If objDt.Rows(0).Item("ESTADO").ToString = "1" Then
                strJOIN = "LEFT"
                strEstado = " AND P.ESTADO = 'A' "
            Else
                strJOIN = " INNER"
                strEstado = ""
            End If

            Try
                lxc_SQL = "SELECT ROWNUM AS NUMERO , T.* FROM (SELECT P.NOMBRE,  PROD.PRODUCTO, PROD.DESCRIPCION DESC_PROD, NVL(S.MONTO_PRESUPUESTADO, P.MONTO_TOTAL_INVERTIDO) MONTO_TOTAL_INVERTIDO, PM.NOMBRES || ' ' || PM.APELLIDO_PATERNO || ' ' || PM.APELLIDO_MATERNO AS MONITOREADOR, PP.PPER, E.EJECUTOR, E.DESCRIPCION AS EJE_DES , " & _
                          "PE.NOMBRES || ' ' || PE.APELLIDO_PATERNO || ' ' || PE.APELLIDO_MATERNO AS ESPECIALISTA, P.OBJETIVO,P.SNIP,P.FECHA_VIABILIDAD, P.POA ,U.NOMBRE AS UBIGEO, TPA.DESCRIPCION, PP.ABREVIATURA , S.SEMAFORO, S.OBSERVACIONES,S.ACCION " & _
                          ",S.MONTO_PROGRAMADO,S.MONTO_COMPROMETIDO, S.MONTO_DEVENGADO, S.MONTO_GIRADO, S.PERIODO, " & _
                          "CASE WHEN NVL(S.MONTO_PROGRAMADO,0) = 0  THEN  0 ELSE ROUND(S.MONTO_GIRADO / S.MONTO_PROGRAMADO,2) END GIRADO_MES, " & _
                          "CASE WHEN NVL(S.MONTO_PRESUPUESTADO,0) = 0  THEN  0 ELSE ROUND(S.MONTO_GIRADO / S.MONTO_PRESUPUESTADO,2) END GIRADO_ANUAL " & _
                          "FROM POA P " & _
                          "INNER JOIN TIPO_PROYECTO_ACTIVIDAD TPA ON TPA.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
                          "LEFT JOIN PERSONA PM ON PM.PERSONA = P.PERSONA_MONITOREO " & _
                          "LEFT JOIN PERSONA PE ON PE.PERSONA = P.PERSONA_ESPECIALISTA " & _
                          "LEFT JOIN UBIGEO  U ON U.UBIGEO = P.UBIGEO LEFT JOIN EJECUTOR E ON P.EJECUTOR = E.EJECUTOR " & _
                          "LEFT JOIN PRODUCTO PROD ON P.PRODUCTO = PROD.PRODUCTO " & strJOIN & _
                          " JOIN SEG_PERIODO_AVAN_FINAN_MENSUAL S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' WHERE 1 = 1 " & strEstado
                If strNombre <> "" Then
                    lxc_SQL = lxc_SQL & "AND UPPER (P.NOMBRE||E.DESCRIPCION) LIKE UPPER('%" & strNombre & "%') "
                End If
                If strTipo <> "all" Then
                    lxc_SQL = lxc_SQL & "AND P.TIPO_PROYECTO_ACTIVIDAD = '" & strTipo & "'"
                End If
                If strPersona <> "" Then
                    lxc_SQL = lxc_SQL & "AND UPPER('" & strPersona & "') IN (UPPER(P.PERSONA_ESPECIALISTA),UPPER(P.PERSONA_MONITOREO))  "
                End If
                lxc_SQL = lxc_SQL & " ORDER BY PPER,EJE_DES,NOMBRE) T "
                objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
                Return objDt

            Catch ex As Exception
                Throw ex
            End Try
        Else
            Return Nothing
        End If
    End Function

    Public Function SemaforoPPER(ByVal strPPER As String, ByVal strPeriodo As String, ByVal strRegion As String, ByVal strAmbito As String, ByVal strEjecutor As String, ByVal strTipo As String, ByVal strEsp As String, ByVal strMon As String, ByVal strSem As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            Dim Ubigeo As String = ""
            If strRegion <> "" Then
                Ubigeo = " AND O.UBIGEO = '" & strRegion & "' "
            End If
            Dim Ambito As String = ""
            If strAmbito <> "" Then
                Ambito = " AND O.AMBITO = '" & strAmbito & "' "
            End If
            Dim Ejecutor As String = ""
            If strEjecutor <> "" Then
                Ejecutor = " AND O.EJECUTOR = '" & strEjecutor & "' "
            End If
            Dim Tipo As String = ""
            If strTipo <> "" Then
                Tipo = " AND O.TIPO_PROYECTO_ACTIVIDAD = '" & strTipo & "' "
            End If
            Dim Esp As String = ""
            If strEsp <> "" Then
                Esp = " AND O.PERSONA_ESPECIALISTA = '" & strEsp & "' "
            End If
            Dim Mon As String = ""
            If strMon <> "" Then
                Mon = " AND O.PERSONA_MONITOREO = '" & strMon & "' "
            End If
            Dim Sem As String = ""
            If strSem <> "" Then
                Sem = "  AND S.SEMAFORO = '" & strSem & "' "
            End If
            objDt = New DataTable
            lxc_SQL = "SELECT * FROM (SELECT P.PPER, P.ABREVIATURA ," & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) AS VERDE, " & _
                    "NVL(ROUND( SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  )/(CASE WHEN SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) +  SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) = 0 THEN 1 ELSE " & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )END ),2),0)  AS  PORC_VERDE," & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) AS AMBAR, " & _
                    "NVL(ROUND(SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  )/(CASE WHEN SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) +  SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) = 0 THEN 1 ELSE " & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )END ),2),0)  AS  PORC_AMBAR," & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  )AS  ROJO," & _
                    "NVL(ROUND(SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  )/(CASE WHEN SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) +  SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) = 0 THEN 1 ELSE " & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )END ),2),0)  AS  PORC_ROJO," & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) AS NINGUNO, " & _
                    "NVL(ROUND(SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )/(CASE WHEN SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) +  SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) = 0 THEN 1 ELSE " & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )END ),2),0)  AS  PORC_NINGUNO," & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) AS TOTAL " & _
                    "FROM PPER P " & _
                    "LEFT JOIN SEG_PERIODO_AVAN_FINAN S  ON P.PPER = S.PPER AND S.PERIODO='" & strPeriodo & "' " & _
                    "INNER JOIN POA O  ON O.POA = S.POA " & _
                    "WHERE P.PPER LIKE  '" & strPPER & "%' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
                    "GROUP BY P.PPER, P.ABREVIATURA " & _
                    "ORDER BY P.PPER ) " & _
                    "UNION ALL " & _
                    "SELECT '0' AS PPER, 'Totales' AS ABREVIATURA, " & _
                    "SUM(VERDE) AS VERDE, NVL(ROUND(SUM(VERDE)/ SUM(TOTAL),2),0)  AS PORC_VERDE," & _
                    "SUM(AMBAR) AS AMBAR,  NVL(ROUND(SUM(AMBAR)/ SUM(TOTAL),2),0)  AS PORC_AMBAR, " & _
                    "SUM(ROJO) AS ROJO,  NVL(ROUND(SUM(ROJO)/ SUM(TOTAL),2),0)  AS PORC_ROJO , " & _
                    "SUM(NINGUNO)  AS NINGUNO,   NVL(ROUND(SUM(NINGUNO)/ SUM(TOTAL),2),0)  AS PORC_NINGUNO , " & _
                    "SUM(TOTAL) AS TOTAL " & _
                    "FROM (" & _
                    "SELECT P.PPER, P.ABREVIATURA ," & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) AS VERDE, " & _
                    "NVL(ROUND( SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  )/(CASE WHEN SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) +  SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) = 0 THEN 1 ELSE " & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )END ),2),0)  AS  PORC_VERDE," & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) AS AMBAR, " & _
                    "NVL(ROUND(SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  )/(CASE WHEN SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) +  SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) = 0 THEN 1 ELSE " & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )END ),2),0)  AS  PORC_AMBAR," & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  )AS  ROJO," & _
                    "NVL(ROUND(SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  )/(CASE WHEN SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) +  SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) = 0 THEN 1 ELSE " & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )END ),2),0)  AS  PORC_ROJO," & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) AS NINGUNO, " & _
                    "NVL(ROUND(SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )/(CASE WHEN SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) +  SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) = 0 THEN 1 ELSE " & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  )END ),2),0)  AS  PORC_NINGUNO," & _
                    "SUM((CASE WHEN S.SEMAFORO='1' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='2' THEN 1 ELSE 0 END )  ) + " & _
                    "SUM((CASE WHEN S.SEMAFORO='3' THEN 1 ELSE 0 END )  ) + SUM((CASE WHEN S.SEMAFORO='4' THEN 1 ELSE 0 END )  ) AS TOTAL " & _
                    "FROM PPER P " & _
                    "LEFT JOIN SEG_PERIODO_AVAN_FINAN S  ON P.PPER = S.PPER AND S.PERIODO='" & strPeriodo & "' " & _
                    "INNER JOIN POA O  ON O.POA = S.POA " & _
                    "WHERE P.PPER LIKE  '" & strPPER & "%' " & Ubigeo & Ambito & Ejecutor & Tipo & Esp & Mon & Sem & _
                    "GROUP BY P.PPER, P.ABREVIATURA " & _
                    "ORDER BY P.PPER " & _
                    ") T"
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ListaAmbito(ByVal strPPER As String, ByVal strRegion As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT DISTINCT A.CODIGO, A.DESCRIPCION FROM ( " & _
                               "SELECT CODIGO, DESCRIPCION FROM GENERAL WHERE ID='AMBITO' AND ESTADO = 'A') A " & _
                               "LEFT JOIN POA P ON P.AMBITO = A.CODIGO " & _
                               "WHERE 1 = 1 "
            If strPPER <> "" Then
                lxc_SQL = lxc_SQL + " AND P.PPER = '" & strPPER & "' "
            End If
            If strRegion <> "" Then
                lxc_SQL = lxc_SQL + " AND P.UBIGEO = '" & strRegion & "' "
            End If
            lxc_SQL = lxc_SQL + " ORDER BY CODIGO "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ListaEjecutor(ByVal strPPER As String, ByVal strRegion As String, ByVal strAmbito As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT DISTINCT E.EJECUTOR, E.DESCRIPCION FROM EJECUTOR E " & _
                      "LEFT JOIN POA P ON P.EJECUTOR = E.EJECUTOR " & _
                      "WHERE P.ESTADO IN('A','C') "
            If strPPER <> "" Then
                lxc_SQL = lxc_SQL + " AND P.PPER = '" & strPPER & "' "
            End If
            If strRegion <> "" Then
                lxc_SQL = lxc_SQL + " AND P.UBIGEO = '" & strRegion & "' "
            End If
            If strAmbito <> "" Then
                lxc_SQL = lxc_SQL + " AND P.AMBITO = '" & strAmbito & "' "
            End If
            lxc_SQL = lxc_SQL + " ORDER BY E.Descripcion ASC "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ReporteEvolucion(ByVal PeriodoIni As String, ByVal PeriodoFin As String, ByVal Region As String, ByVal Ambito As String, ByVal Ejecutor As String, ByVal Decreto As String, ByVal strAnhioFirma As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT S.PERIODO, P.DESCRIPCION, " & _
                      "OBT_PORC_GIRADO(S.PERIODO,'PPE-0001','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PIRDAIS, " & _
                      "OBT_PORC_GIRADO(S.PERIODO,'PPE-0002','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PTCD, " & _
                      "OBT_PORC_GIRADO(S.PERIODO,'PPE-0003','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PPCOD, " & _
                      "OBT_PORC_GIRADO(S.PERIODO,'','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS TOTAL " & _
                        "FROM SEG_PERIODO_AVAN_FINAN S, PERIODO P, POA PO " & _
                        "WHERE " & _
                                "S.POA = PO.POA AND " & _
                                "S.PERIODO = P.PERIODO AND " & _
                                "P.ESTADO = '0' AND " & _
                                "P.TIPO_PERIODO = 'AVANCE_SEMANAL' AND " & _
                                "P.ANHIO = PO.ANHIO_FIRMA_POA AND " & _
                                "PO.ANHIO_FIRMA_POA =  '" & strAnhioFirma & "' AND " & _
                                "S.PERIODO BETWEEN TO_NUMBER('" & PeriodoIni & "') AND TO_NUMBER('" & PeriodoFin & "') " & _
                        "GROUP BY S.PERIODO, P.DESCRIPCION " & _
                        "ORDER BY TO_NUMBER(S.PERIODO) ASC "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ReporteEvolucionDevengado(ByVal PeriodoIni As String, ByVal PeriodoFin As String, ByVal Region As String, ByVal Ambito As String, ByVal Ejecutor As String, ByVal Decreto As String, ByVal strAnhioFirma As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            'By Tigrito: Commented...
            'lxc_SQL = "SELECT S.PERIODO,P.DESCRIPCION,  " & _
            '          "OBT_PORC_DEVENGADO(S.PERIODO,'PPE-0001','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PIRDAIS, " & _
            '          "OBT_PORC_DEVENGADO(S.PERIODO,'PPE-0002','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PTCD, " & _
            '          "OBT_PORC_DEVENGADO(S.PERIODO,'PPE-0003','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PPCOD, " & _
            '          "OBT_PORC_DEVENGADO(S.PERIODO,'','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS TOTAL " & _
            '          "FROM SEG_PERIODO_AVAN_FINAN S " & _
            '          "INNER JOIN PERIODO P ON S.PERIODO = P.PERIODO " & _
            '          "WHERE  P.ESTADO = '0' AND P.TIPO_PERIODO='AVANCE_SEMANAL' " & _
            '          "AND S.PERIODO IN (SELECT PERIODO FROM PERIODO WHERE TO_NUMBER(PERIODO) BETWEEN '" & PeriodoIni & "' AND '" & PeriodoFin & "') " & _
            '          "GROUP BY S.PERIODO,P.DESCRIPCION " & _
            '          "ORDER BY TO_NUMBER(S.PERIODO) ASC "

            lxc_SQL = "SELECT S.PERIODO, P.DESCRIPCION, " & _
                        "OBT_PORC_DEVENGADO(S.PERIODO,'PPE-0001','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PIRDAIS, " & _
                        "OBT_PORC_DEVENGADO(S.PERIODO,'PPE-0002','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PTCD, " & _
                        "OBT_PORC_DEVENGADO(S.PERIODO,'PPE-0003','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS PPCOD, " & _
                        "OBT_PORC_DEVENGADO(S.PERIODO,'','" & Region & "','" & Ambito & "','" & Ejecutor & "','" & Decreto & "') AS TOTAL " & _
                        "FROM SEG_PERIODO_AVAN_FINAN S, PERIODO P, POA PO " & _
                        "WHERE " & _
                                "S.POA = PO.POA AND " & _
                                "S.PERIODO = P.PERIODO AND " & _
                                "P.ESTADO = '0' AND " & _
                                "P.TIPO_PERIODO = 'AVANCE_SEMANAL' AND " & _
                                "P.ANHIO = PO.ANHIO_FIRMA_POA AND " & _
                                "PO.ANHIO_FIRMA_POA =  '" & strAnhioFirma & "' AND " & _
                                "S.PERIODO BETWEEN TO_NUMBER('" & PeriodoIni & "') AND TO_NUMBER('" & PeriodoFin & "') " & _
                        "GROUP BY S.PERIODO, P.DESCRIPCION " & _
                        "ORDER BY TO_NUMBER(S.PERIODO) ASC "

            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ReporteRanking(ByVal Periodo As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT P.PPER, " & _
                    " PER.NOMBRES || ' ' || PER.APELLIDO_PATERNO MONITOREADOR, " & _
                    " SUM (P.MONTO_TOTAL_INVERTIDO) PRESUPUESTO_MANEJADO, " & _
                    " SUM (SF.MONTO_GIRADO) MONTO_GIRADO_ACUMULADO, " & _
                    " ROUND(SUM (SF.MONTO_GIRADO) / SUM (P.MONTO_TOTAL_INVERTIDO),2) PORCENTAJE_AVANCE_GIRADO, " & _
                    " ROUND ( (SUM (P.MONTO_TOTAL_INVERTIDO) / T.TOTAL), 6) PESO_RELATIVO, " & _
                    " COUNT (P.POA) NUM_ACTIVIDADES, " & _
                    " COUNT (DISTINCT P.EJECUTOR) NUM_EJECUTORES, " & _
                    " ROUND((SUM (SF.MONTO_GIRADO) / SUM (P.MONTO_TOTAL_INVERTIDO)) * ( (SUM (P.MONTO_TOTAL_INVERTIDO) / T.TOTAL)),5) DESEMPENO " & _
                    " FROM POA P, " & _
                    " PERSONA PER, " & _
                    " SEG_PERIODO_AVAN_FINAN SF, " & _
                    " (SELECT SUM (MONTO_TOTAL_INVERTIDO) TOTAL FROM POA) T " & _
                    " WHERE P.POA = SF.POA AND P.ESTADO IN('A','C') " & _
                    " AND P.PERSONA_MONITOREO = PER.PERSONA " & _
                    " AND SF.PERIODO = '" & Periodo & "' " & _
                    " GROUP BY P.PPER,PER.NOMBRES, PER.APELLIDO_PATERNO, T.TOTAL " & _
                    " ORDER BY 1 , 9 DESC "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ListaTipoPPER(ByVal strPeriodo As String, ByVal strPPER As String, ByVal strRegion As String, ByVal strAmbito As String, ByVal strEjecutor As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = " SELECT DISTINCT COUNT(PP.PPER) NUM, S.PERIODO, " & _
                      " PP.PPER, PP.ABREVIATURA, " & _
                      " TP.TIPO_PROYECTO_ACTIVIDAD," & _
                      " CASE WHEN TP.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'PRODUCTO' " & _
                      "     ELSE TP.DESCRIPCION END, " & _
                      " CASE WHEN TP.TIPO_PROYECTO_ACTIVIDAD = '2' THEN 'A' " & _
                      "     ELSE (CASE WHEN TP.TIPO_PROYECTO_ACTIVIDAD = '1' THEN 'B' " & _
                      "             ELSE 'C' END) End TIPO, " & _
                      " SUM(PO.MONTO_TOTAL_INVERTIDO) MONTO_TOTAL_INVERTIDO, " & _
                      " SUM(NVL(PO.MONTO_TRANSFERIDO,0)) MONTO_TRANSFERIDO, " & _
                      " SUM(S.MONTO_PROGRAMADO) MONTO_PROGRAMADO, " & _
                      " SUM(S.MONTO_COMPROMETIDO) MONTO_COMPROMETIDO, " & _
                      " SUM(S.MONTO_DEVENGADO) MONTO_DEVENGADO, " & _
                      " SUM(S.MONTO_GIRADO) MONTO_GIRADO, " & _
                      " CASE WHEN SUM(S.MONTO_PROGRAMADO) = 0 THEN 0 ELSE ROUND(SUM(NVL(S.MONTO_GIRADO,0)) /SUM(NVL(S.MONTO_PROGRAMADO,0)),2) END GIRADO_MES, " & _
                      " CASE WHEN SUM(PO.MONTO_TOTAL_INVERTIDO) = 0 THEN 0 ELSE ROUND(SUM(NVL(S.MONTO_GIRADO,0)) /SUM(NVL(PO.MONTO_TOTAL_INVERTIDO,0)),2) END GIRADO_ANUAL " & _
                      " FROM TIPO_PROYECTO_ACTIVIDAD TP " & _
                      " INNER JOIN POA PO " & _
                      " ON PO.TIPO_PROYECTO_ACTIVIDAD = TP.TIPO_PROYECTO_ACTIVIDAD AND PO.ESTADO IN('A','C') " & _
                      " INNER JOIN PPER PP " & _
                      " ON PO.PPER = PP.PPER " & _
                      " INNER JOIN SEG_PERIODO_AVAN_FINAN S ON S.POA = PO.POA " & _
                      " WHERE S.PERIODO = '" & strPeriodo & "' AND  PP.PPER LIKE '" & strPPER & "%' AND PO.UBIGEO LIKE '" & strRegion & "%' AND PO.AMBITO LIKE '" & strAmbito & "%' AND PO.EJECUTOR LIKE '" & strEjecutor & "%' " & _
                      " GROUP BY  PP.PPER,  PP.ABREVIATURA,  TP.TIPO_PROYECTO_ACTIVIDAD, TP.DESCRIPCION, S.PERIODO " & _
                      " ORDER BY PP.PPER, TIPO"
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ProductoXPPER(ByVal strPPER As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT DISTINCT PP.PPER, " & _
                    "PO.PRODUCTO CODIGO, " & _
                    "PR.DESCRIPCION, " & _
                    "PO.TIPO_PROYECTO_ACTIVIDAD, " & _
                    "PR.NUM_PRODUCTO NUM " & _
                    "FROM PPER PP " & _
                    "INNER JOIN POA PO ON PO.PPER = PP.PPER " & _
                    "INNER JOIN PRODUCTO PR ON PO.PRODUCTO = PR.PRODUCTO " & _
                    "WHERE PP.PPER = '" & strPPER & "' AND PO.ESTADO IN('A','C') ORDER BY PO.PRODUCTO "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function POAXPPER(ByVal strPPER As String, ByVal strTipo As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT DISTINCT PP.PPER, " & _
                      " 'POA' CODIGO, " & _
                      " 'NOMBRE' DESCRIPCION," & _
                      " P.TIPO_PROYECTO_ACTIVIDAD, " & _
                      " 0 NUM " & _
                      " FROM POA P INNER JOIN PPER PP ON P.PPER = PP.PPER " & _
                      " WHERE P.TIPO_PROYECTO_ACTIVIDAD = '3' AND P.ESTADO IN('A','C') " & _
                      " AND PP.PPER = '" & strPPER & "' " & _
                      " ORDER BY PP.PPER, P.TIPO_PROYECTO_ACTIVIDAD "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ProyectoXPPER(ByVal strPPER As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT DISTINCT P.PPER," & _
                      " G.CODIGO," & _
                      " G.DESCRIPCION," & _
                      " P.TIPO_PROYECTO_ACTIVIDAD," & _
                      " 0 NUM" & _
                      " FROM POA P" & _
                      " INNER JOIN" & _
                      " GENERAL G" & _
                      " ON G.CODIGO = P.TIPO_PROYECTO_DES AND G.ID = 'TIPO_PROYECTO_DES'" & _
                      " WHERE P.PPER = '" & strPPER & "' AND G.ESTADO IN('A','C') ORDER BY G.CODIGO"
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ReporteSabanaDetalle(ByVal strPeriodo As String, ByVal strPPER As String, ByVal strTipo As String, ByVal strCodigo As String, ByVal strRegion As String, ByVal strAmbito As String, ByVal strEjecutor As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT ROWNUM NUMERO, " & _
                    "PP.PPER, " & _
                    "PP.ABREVIATURA, " & _
                    "TP.TIPO_PROYECTO_ACTIVIDAD," & _
                    "PO.PRODUCTO, " & _
                    "PR.DESCRIPCION, " & _
                    "TP.DESCRIPCION TIPO_DESC, " & _
                    "PO.EJECUTOR, " & _
                    "EJ.DESCRIPCION  ENTIDADES_EJECUTORAS , " & _
                    "PO.NOMBRE, " & _
                    "PO.MONTO_TOTAL_INVERTIDO PRESUPUESTO_MODIFICADO, " & _
                    "PO.MONTO_TRANSFERIDO, " & _
                    "SE.MONTO_PROGRAMADO, " & _
                    "SE.MONTO_COMPROMETIDO, " & _
                    "SE.MONTO_DEVENGADO, " & _
                    "SE.MONTO_GIRADO, " & _
                    "CASE WHEN SE.MONTO_PROGRAMADO = 0 THEN 0 ELSE ROUND(NVL(SE.MONTO_GIRADO/SE.MONTO_PROGRAMADO,0),2) END GIRADO_MES, " & _
                    "CASE WHEN PO.MONTO_TOTAL_INVERTIDO = 0 THEN 0 ELSE ROUND(NVL(SE.MONTO_GIRADO/PO.MONTO_TOTAL_INVERTIDO,0),2) END GIRADO_ANUAL, " & _
                    "PM.NOMBRES || ' ' || PM.APELLIDO_PATERNO || ' ' || PM.APELLIDO_MATERNO MONITOREADOR, " & _
                    "PE.NOMBRES || ' ' || PE.APELLIDO_PATERNO || ' ' || PE.APELLIDO_MATERNO ESPECIALISTA, " & _
                    "SE.OBSERVACIONES, " & _
                    "SE.SEMAFORO, " & _
                    "SE.ACCION, " & _
                    "PO.POA, " & _
                    "U.NOMBRE REGION, " & _
                    "PO.ATRIBUTO_AUX " & _
                    "FROM POA PO " & _
                    "INNER JOIN EJECUTOR EJ ON PO.EJECUTOR = EJ.EJECUTOR " & _
                    "INNER JOIN PPER PP ON PO.PPER = PP.PPER " & _
                    "INNER JOIN TIPO_PROYECTO_ACTIVIDAD TP ON PO.TIPO_PROYECTO_ACTIVIDAD = TP.TIPO_PROYECTO_ACTIVIDAD " & _
                    "INNER JOIN SEG_PERIODO_AVAN_FINAN SE ON PO.POA = SE.POA " & _
                    "LEFT JOIN PRODUCTO PR ON PR.PRODUCTO = PO.PRODUCTO " & _
                    "INNER JOIN PERSONA PM ON PO.PERSONA_MONITOREO= PM.PERSONA " & _
                    "INNER JOIN PERSONA PE ON PO.PERSONA_ESPECIALISTA= PE.PERSONA " & _
                    "INNER JOIN UBIGEO U ON PO.UBIGEO = U.UBIGEO " & _
                    "WHERE SE.PERIODO = '" & strPeriodo & "' AND PP.PPER='" & strPPER & "' AND TP.TIPO_PROYECTO_ACTIVIDAD='" & strTipo & "' AND PO.ESTADO IN('A','C') " & _
                    "AND PO.UBIGEO LIKE '" & strRegion & "%' AND PO.AMBITO LIKE '" & strAmbito & "%' AND PO.EJECUTOR LIKE '" & strEjecutor & "%'"
            If strTipo = "1" Then
                lxc_SQL = lxc_SQL + " AND PO.TIPO_PROYECTO_DES = '" & strCodigo & "' "
            End If
            If strTipo = "2" Then
                lxc_SQL = lxc_SQL + " AND PR.PRODUCTO = '" & strCodigo & "' "
            End If
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ListaPPER(ByVal strPeriodo As String, ByVal strPPER As String, ByVal strRegion As String, ByVal strAmbito As String, ByVal strEjecutor As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT COUNT (PP.PPER) NUM, " & _
                      "S.PERIODO, " & _
                      "PP.PPER, " & _
                      "PP.DESCRIPCION,  " & _
                      "PP.ABREVIATURA, " & _
                      "SUM (PO.MONTO_TOTAL_INVERTIDO) MONTO_TOTAL_INVERTIDO, " & _
                      "SUM (NVL (PO.MONTO_TRANSFERIDO, 0)) MONTO_TRANSFERIDO, " & _
                      "SUM (S.MONTO_PROGRAMADO) MONTO_PROGRAMADO, " & _
                      "SUM (S.MONTO_COMPROMETIDO) MONTO_COMPROMETIDO, " & _
                      "SUM (S.MONTO_DEVENGADO) MONTO_DEVENGADO, " & _
                      "SUM (S.MONTO_GIRADO) MONTO_GIRADO,  " & _
                      "CASE WHEN SUM (S.MONTO_PROGRAMADO) = 0 THEN 0 ELSE ROUND(SUM(NVL(S.MONTO_GIRADO, 0))/ SUM (NVL (S.MONTO_PROGRAMADO, 0)),2)End GIRADO_MES, " & _
                      "CASE WHEN SUM (PO.MONTO_TOTAL_INVERTIDO) = 0 THEN 0 " & _
                      "ELSE ROUND(SUM(NVL(S.MONTO_GIRADO, 0))/ SUM (NVL (PO.MONTO_TOTAL_INVERTIDO, 0)),2) End GIRADO_ANUAL " & _
                      "FROM PPER PP " & _
                      "INNER JOIN POA PO " & _
                      "ON PO.PPER = PP.PPER " & _
                      "INNER JOIN SEG_PERIODO_AVAN_FINAN S " & _
                      "ON PO.POA = S.POA  " & _
                      "WHERE S.PERIODO='" & strPeriodo & "' AND PO.ESTADO IN('A','C') AND PP.PPER LIKE '" & strPPER & "%' AND PO.UBIGEO LIKE '" & strRegion & "%' AND PO.AMBITO LIKE '" & strAmbito & "%' AND PO.EJECUTOR LIKE '" & strEjecutor & "%'" & _
                      "GROUP BY S.PERIODO, " & _
                      "PP.PPER, " & _
                      "PP.DESCRIPCION, " & _
                      "PP.ABREVIATURA " & _
                      "ORDER BY PP.PPER"
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ListaTotalSabana(ByVal strPeriodo As String, ByVal strPPER As String, ByVal strRegion As String, ByVal strAmbito As String, ByVal strEjecutor As String)
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT COUNT (s.periodo) NUM, " & _
                    "SUM (PO.MONTO_TOTAL_INVERTIDO) MONTO_TOTAL_INVERTIDO, " & _
                    "SUM (NVL (PO.MONTO_TRANSFERIDO, 0)) MONTO_TRANSFERIDO, " & _
                    "SUM (S.MONTO_PROGRAMADO) MONTO_PROGRAMADO, " & _
                    "SUM (S.MONTO_COMPROMETIDO) MONTO_COMPROMETIDO, " & _
                    "SUM (S.MONTO_DEVENGADO) MONTO_DEVENGADO, " & _
                    "SUM (S.MONTO_GIRADO) MONTO_GIRADO, " & _
                    "CASE WHEN SUM (S.MONTO_PROGRAMADO) = 0 THEN 0 ELSE ROUND(SUM (NVL (S.MONTO_GIRADO, 0))/ SUM (NVL (S.MONTO_PROGRAMADO, 0)),2) End GIRADO_MES, " & _
                    "CASE WHEN SUM (PO.MONTO_TOTAL_INVERTIDO) = 0 THEN 0 ELSE ROUND( SUM(NVL (S.MONTO_GIRADO, 0))/SUM(NVL (PO.MONTO_TOTAL_INVERTIDO, 0)),2) End GIRADO_ANUAL " & _
                    "FROM PPER PP " & _
                    "INNER JOIN POA PO " & _
                    "ON PO.PPER = PP.PPER " & _
                    "INNER JOIN SEG_PERIODO_AVAN_FINAN S " & _
                    "ON PO.POA = S.POA " & _
                    "WHERE S.PERIODO='" & strPeriodo & "' AND PO.ESTADO IN('A','C') " & _
                    "AND PP.PPER LIKE '" & strPPER & "%' AND PO.UBIGEO LIKE '" & strRegion & "%' AND PO.AMBITO LIKE '" & strAmbito & "%' AND PO.EJECUTOR LIKE '" & strEjecutor & "%'" & _
                    "GROUP BY S.PERIODO "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function ListaPOA_Reporte_Especifico(ByVal strPPER As String, ByVal strNombre As String, ByVal strRegion As String, ByVal strEjecutor As String, ByVal strSemaforo As String, ByVal strPersona As String, ByVal strPeriodo As String, ByVal strOrden As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String

        Try
            lxc_SQL = "SELECT T.* FROM (SELECT P.NOMBRE,  PROD.PRODUCTO, PROD.DESCRIPCION DESC_PROD, P.MONTO_TOTAL_INVERTIDO, PM.NOMBRES || ' ' || PM.APELLIDO_PATERNO || ' ' || PM.APELLIDO_MATERNO AS MONITOREADOR, PP.PPER, E.EJECUTOR, E.DESCRIPCION AS EJE_DES , " & _
                      "PE.NOMBRES || ' ' || PE.APELLIDO_PATERNO || ' ' || PE.APELLIDO_MATERNO AS ESPECIALISTA, P.OBJETIVO,P.SNIP,P.FECHA_VIABILIDAD, P.POA ,U.NOMBRE AS UBIGEO, TPA.DESCRIPCION, PP.ABREVIATURA , S.SEMAFORO, S.OBSERVACIONES,S.ACCION " & _
                      ",S.MONTO_PROGRAMADO,S.MONTO_COMPROMETIDO, S.MONTO_DEVENGADO, S.MONTO_GIRADO, S.PERIODO, " & _
                      "CASE WHEN NVL(S.MONTO_PROGRAMADO,0) = 0  THEN  0 ELSE ROUND(S.MONTO_GIRADO / S.MONTO_PROGRAMADO,2) END GIRADO_MES, " & _
                      "CASE WHEN NVL(S.MONTO_PRESUPUESTADO,0) = 0  THEN  0 ELSE ROUND(S.MONTO_GIRADO / S.MONTO_PRESUPUESTADO,2) END GIRADO_ANUAL " & _
                      "FROM POA P " & _
                      "INNER JOIN TIPO_PROYECTO_ACTIVIDAD TPA ON TPA.TIPO_PROYECTO_ACTIVIDAD = P.TIPO_PROYECTO_ACTIVIDAD INNER JOIN PPER PP ON PP.PPER = P.PPER " & _
                      "LEFT JOIN PERSONA PM ON PM.PERSONA = P.PERSONA_MONITOREO " & _
                      "LEFT JOIN PERSONA PE ON PE.PERSONA = P.PERSONA_ESPECIALISTA " & _
                      "LEFT JOIN UBIGEO  U ON U.UBIGEO = P.UBIGEO LEFT JOIN EJECUTOR E ON P.EJECUTOR = E.EJECUTOR " & _
                      "LEFT JOIN PRODUCTO PROD ON P.PRODUCTO = PROD.PRODUCTO " & _
                      "LEFT JOIN SEG_PERIODO_AVAN_FINAN S ON P.POA = S.POA AND S.PERIODO = '" & strPeriodo & "' WHERE 1 = 1 AND P.ESTADO IN('A','C') "
            If strPPER <> "" Then
                lxc_SQL = lxc_SQL & "AND PP.PPER='" & strPPER & "' "
            End If
            If strNombre <> "" Then
                lxc_SQL = lxc_SQL & "AND UPPER (P.NOMBRE) LIKE UPPER('%" & strNombre & "%') "
            End If
            If strRegion <> "" Then
                lxc_SQL = lxc_SQL & "AND U.UBIGEO='" & strRegion & "' "
            End If
            If strEjecutor <> "" Then
                lxc_SQL = lxc_SQL & "AND E.EJECUTOR = '" & strEjecutor & "' "
            End If
            If strSemaforo <> "" Then
                lxc_SQL = lxc_SQL & "AND S.SEMAFORO = '" & strSemaforo & "' "
            End If
            If strPersona <> "" Then
                lxc_SQL = lxc_SQL & "AND UPPER('" & strPersona & "') IN (UPPER(P.PERSONA_ESPECIALISTA),UPPER(P.PERSONA_MONITOREO))  "
            End If
            lxc_SQL = lxc_SQL & " ORDER BY PPER,EJECUTOR,NOMBRE) T "
            If strOrden <> "" Then
                lxc_SQL = lxc_SQL & "ORDER BY T.GIRADO_ANUAL " & strOrden & " "
            End If
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt

        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function EvolucionPOA(ByVal strPOA As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT S.PERIODO, O.POA, O.UBIGEO, U.NOMBRE AS REGION, P.DESCRIPCION, " & _
                       "ROUND( NVL(S.MONTO_DEVENGADO/S.MONTO_PRESUPUESTADO,0),2) DEVENGADO, " & _
                       "ROUND( NVL(S.MONTO_GIRADO/S.MONTO_PRESUPUESTADO,0),2) GIRADO, " & _
                       "S.OBSERVACIONES, " & _
                       "S.ACCION, " & _
                       "S.SEMAFORO, " & _
                       "PM.NOMBRES || ' ' || PM.APELLIDO_PATERNO || ' ' || PM.APELLIDO_MATERNO MONITOREADOR, " & _
                       "PE.NOMBRES || ' ' || PE.APELLIDO_PATERNO || ' ' || PE.APELLIDO_MATERNO ESPECIALISTA " & _
                       "FROM SEG_PERIODO_AVAN_FINAN S " & _
                       "INNER JOIN POA O ON O.POA = S.POA " & _
                       "INNER JOIN PERIODO P ON S.PERIODO = P.PERIODO " & _
                       "INNER JOIN PERSONA PM ON PM.PERSONA = O.PERSONA_MONITOREO " & _
                       "INNER JOIN PERSONA PE ON PE.PERSONA = O.PERSONA_ESPECIALISTA " & _
                       "INNER JOIN UBIGEO U ON U.UBIGEO = O.UBIGEO " & _
                       "WHERE O.POA = '" & strPOA & "' AND O.ESTADO IN('A','C') AND P.ESTADO = '0' ORDER BY TO_NUMBER(S.PERIODO) DESC"
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function CargarAvanceIncompleto(ByVal strPeriodo As String, ByVal strAnhioFirma As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT PP.ABREVIATURA PPER," + _
                     " COUNT (PO.POA) NUM," + _
                     " PM.NOMBRES || ' ' || PM.APELLIDO_PATERNO || ' ' || PM.APELLIDO_MATERNO MONITOREADOR," + _
                     " PE.NOMBRES || ' ' || PE.APELLIDO_PATERNO || ' ' || PE.APELLIDO_MATERNO ESPECIALISTA" + _
                     " FROM POA PO " + _
                     " INNER JOIN PPER PP" + _
                     " ON PP.PPER = PO.PPER" + _
                     " INNER JOIN PERSONA PM" + _
                     " ON PM.PERSONA = PO.PERSONA_MONITOREO" + _
                     " INNER JOIN PERSONA PE" + _
                     " ON PE.PERSONA = PO.PERSONA_ESPECIALISTA" + _
                     " WHERE PO.ESTADO IN('A','C') AND PO.POA NOT IN (SELECT POA FROM SEG_PERIODO_AVAN_FINAN WHERE PERIODO = '" + strPeriodo + "') AND  PO.ANHIO_FIRMA_POA = '" + strAnhioFirma + "'" + _
                     " GROUP BY PP.ABREVIATURA," + _
                     "    PM.NOMBRES         || ' '         || PM.APELLIDO_PATERNO         || ' '         || PM.APELLIDO_MATERNO," + _
                     "    PE.NOMBRES         || ' '         || PE.APELLIDO_PATERNO         || ' '         || PE.APELLIDO_MATERNO" + _
                     " ORDER BY PP.ABREVIATURA,    " + _
                     " PE.NOMBRES         || ' '         || PE.APELLIDO_PATERNO         || ' '         || PE.APELLIDO_MATERNO," + _
                     " PM.NOMBRES         || ' '         || PM.APELLIDO_PATERNO         || ' '         || PM.APELLIDO_MATERNO"
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function CargarPoaCompletitud(ByVal strAnhioFirma As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable
        Dim lxc_SQL As String
        Try
            lxc_SQL = "SELECT PPER.ABREVIATURA PPER, P.POA, E.DESCRIPCION EJECUTOR, P.NOMBRE NOMBRE_ACTIVIDAD, TIPO_PROY.TIPO, UBI.REGION, MONI.MONITOREADOR, ESPE.ESPECIALISTA, NVL2(FISICO,FISICO, 'FALTA') PROGRAMACION_FISICA, NVL2(FINANCIERO,FINANCIERO, 'FALTA') PROGRAMACION_FINANCIERA, MONTO_INGRESADO_FINANCIERA, MONTO_TOTAL_INVERTIDO " + _
                        "FROM POA P, EJECUTOR E, PPER, " + _
                                " (SELECT PERSONA, (NOMBRES ||' '|| APELLIDO_PATERNO) MONITOREADOR FROM PERSONA WHERE NOMBRES LIKE '%') MONI, " + _
                                " (SELECT PERSONA,  (NOMBRES ||' '|| APELLIDO_PATERNO) ESPECIALISTA FROM PERSONA) ESPE, " + _
                                " (SELECT UBIGEO, NOMBRE REGION FROM UBIGEO WHERE PROVINCIA = '00' AND  DISTRITO = '00') UBI, " + _
                                " (SELECT TIPO_PROYECTO_ACTIVIDAD, DESCRIPCION TIPO FROM TIPO_PROYECTO_ACTIVIDAD ) TIPO_PROY, " + _
                                "( " + _
                                "SELECT POA, 'INGRESADO' FISICO " + _
                                "FROM POA_ACTIVIDAD_FISICA " + _
                                "GROUP BY POA " + _
                                ") POA_FIS, " + _
                                "( " + _
                                "SELECT POA, SUM(META_ANUAL) MONTO_INGRESADO_FINANCIERA, 'INGRESADO' FINANCIERO " + _
                                "FROM POA_ACTIVIDAD_FINANCIERA " + _
                                "GROUP BY POA " + _
                                ") POA_FIN " + _
                        "WHERE " + _
                                    "P.PPER = PPER.PPER AND " + _
                                    "P.EJECUTOR = E.EJECUTOR AND " + _
                                    "P.PERSONA_MONITOREO = MONI.PERSONA AND " + _
                                    "P.PERSONA_ESPECIALISTA = ESPE.PERSONA AND  " + _
                                    "P.UBIGEO = UBI.UBIGEO AND  " + _
                                    "P.TIPO_PROYECTO_ACTIVIDAD = TIPO_PROY.TIPO_PROYECTO_ACTIVIDAD AND " + _
                                    "P.POA = POA_FIS.POA(+) AND  " + _
                                    "P.POA = POA_FIN.POA(+) AND  " + _
                                    "P.ANHIO_FIRMA_POA = '" + strAnhioFirma + "' " + _
                        "ORDER BY PPER,  MONITOREADOR, ESPECIALISTA, EJECUTOR "
            objDt = objData.ExecuteSQL(lxc_SQL, "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function Lista_PPER() As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable

        Try
            objData.CreateOutputOracle("p_Cursor", "", 100)
            objDt = objData.ExecuteOracle("SP_PPER", "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function Lista_PPER_EJECUTOR(ByVal p_ano As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable

        Try
            objData.CreateInputOracle("v_ano", p_ano, 4)
            objData.CreateOutputOracle("p_Cursor", "", 100)
            objDt = objData.ExecuteOracle("SP_PPER_EJECUTOR", "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Public Function Lista_PPER_REGION(ByVal p_ano As String) As DataTable
        Dim objData As AdministradorOracle = New AdministradorOracle
        Dim objDt As DataTable

        Try
            objData.CreateInputOracle("v_ano", p_ano, 4)
            objData.CreateOutputOracle("p_Cursor", "", 100)
            objDt = objData.ExecuteOracle("SP_PPER_REGION", "Conexion.Oracle")
            Return objDt
        Catch ex As Exception
            Throw ex
        End Try
    End Function

End Class
